home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / nieuzytki / sploiner / source.lha / join.c < prev    next >
C/C++ Source or Header  |  1995-09-26  |  2KB  |  62 lines

  1. #include "common.h"
  2.  
  3. void join(int argc, char *argv[])
  4. {
  5.   FILE *fp_in;
  6.   FILE *fp_out;
  7.   char infiles[105];
  8.   char *outfile;
  9.   int ext, part = 0;
  10.  
  11.   if (argc != 3) usage_join();
  12.   OutputName(*argv, infiles);
  13.   if (strcmp(*++argv, "as") != 0) usage_join();
  14.   outfile = *++argv;
  15.   ext=strlen(infiles)-4;
  16.   
  17.   if ((fp_out = fopen(outfile, "wb")) == NULL) 
  18.     printf("Can't open %s for writing.\n",outfile);
  19.  
  20.   while((fp_in = fopen(infiles, "rb")) != NULL)
  21.     {
  22.       int i;
  23.       char *buff=(char *) malloc(20000);
  24.       if (buff == NULL)
  25.     {
  26.       fprintf(stderr, "Captain, sensors reveal a distortion in the\n");
  27.       fprintf(stderr, "space/time continuum. We cannot find space\n");
  28.       fprintf(stderr, "for our %d bytes buffer at this time\n", 20000);
  29.       fprintf(stderr, "Starfleet is aborting our mission.\n");
  30.       exit(1);
  31.     }
  32.       fprintf(stderr, "Reading %s\n",infiles);
  33.       while(((i=fread(buff, 1, 20000, fp_in))!=0) && !ferror(fp_in))
  34.     if(fwrite(buff, 1, i, fp_out) != i)
  35.       {
  36.         fprintf(stderr, "Error: Writing to <%s> failed.\n",outfile);
  37.         fclose(fp_in);
  38.         fclose(fp_out);
  39.         exit(1);
  40.       }
  41.       free(buff);
  42.       fclose(fp_in);
  43.       if(ferror(fp_in))
  44.     {
  45.       fprintf(stderr, "Error: Reading from <%s> failed.\n",outfile);
  46.       break; /* goto "fclose(fp_out);" and then return. */
  47.     }
  48.       part++;
  49.       infiles[ext+1] = ((part/100) + 48);
  50.       infiles[ext+2] = (((part/10)%10) + 48);
  51.       infiles[ext+3] = ((part%10) + 48);
  52.     }
  53.   if(infiles[ext+1] == '0' &&
  54.      infiles[ext+2] == '0' && 
  55.      infiles[ext+3] == '0')
  56.     fprintf(stderr, "Couldn't find %s for reading - nothing read.\n", infiles);
  57.   else
  58.     fprintf(stderr, "Done writing %s\n", outfile);
  59.   fclose(fp_out);
  60. }
  61.  
  62.